ホームに戻る
出典 :
コード ブロック スニペットを作成して再利用する - Visual Studio (Windows) | Microsoft Learn コード スニペット スキーマ リファレンス - Visual Studio (Windows) | Microsoft Learn C# コード スニペット - Visual Studio (Windows) | Microsoft Learn Visual C++ のコード スニペット - Visual Studio (Windows) | Microsoft Learn [VisualStudio] よく書くコードはスニペットにまとめて爆速コーディング - Qiita 【VisualStudio】VisualStudioで自作コメント挿入したい #VisualStudio - Qiita
関連 :
[VS Code]スニペット
目次 :

スニペット(コードスニペット)とは

原義は「切れ端」や「断片」。プログラミングにおいては、再利用できるひとかたまりのコードを表す。
よく使うコードをスニペットとして登録しておくと容易に再利用でき、入力効率が向上する。
また、Visual Studioには予め多数のスニペットが登録されている。

スニペットの呼び出し(コードへの適用)

スニペットの展開方法は2種類存在し、呼び出す際の手順が一部異なる。
  1. 指定位置への挿入 : キャレットの位置に挿入される
  2. ブロックの挿入(C++、C#のみ) : 選択されたコードブロックの周りに追加される

1. 指定位置への挿入

  1. スニペットを挿入したい箇所にカーソル(キャレット)を置き、「編集」>「IntelliSense」>「スニペットの挿入」または「ブロックの挿入」を選択する。

    (ホットキーとして Ctrl + K ⇒ Ctrl + X (スニペット)、Ctrl + K ⇒ Ctrl + S (ブロック)も使用できる。)
  2. 挿入したいスニペットをリストから選択する。

ショートカットを登録している場合

ユーザ辞書と同様に用いることができる。
  1. スニペットを呼び出したい箇所に登録したショートカットを入力し、Tabキーを2回押す
  2. スニペットが展開される。

2. ブロックの挿入

C++、C#以外の言語では使用できない点に注意。
  1. ブロックで囲みたい箇所を選択し、「編集」>「IntelliSense」>「ブロックの挿入」を選択する。 (または Ctrl + K ⇒ Ctrl + S )
  2. 挿入したいブロックをリストから選択する。

スニペットの新規作成

スニペットをXML形式で作成し、インポートすることで使用可能となる。

1. スニペットXMLの作成

Visual Studio Snippet Generator(Webサイト)を用いる場合

機能は限定されるが、スニペットを簡便に作成できる。
  1. Visual Studio Snippet Generatorを開く。
  2. 各項目に入力し、"Generate"を押す。
  3. 下の欄にスニペットが出力されていることを確認したら"Download"を押し、任意のフォルダにファイルをダウンロードする。

手動で入力する場合

より複雑で高機能なスニペットを作成することができる。
ただ最初から作成することは手順が煩雑であるため、前項のVisual Studio Snippet Generatorで作成したものを編集するとよい。
作例

上記はスニペットを記述したXMLの例である。
まず任意の場所にXMLファイルを作成し、拡張子を .snippet に変更する。
スニペットとして展開したい内容は Code 要素中に記述し、<![CDATA[]]> で囲む。
ここで、リテラル( Literal )として datatype が指定されており、Code 中にも $datatype$ が存在するが、
展開時に、複数ある $datatype$ のうち一つを変更すると、他の $datatype$ も同じ内容に置き換わる。
IDとして指定されたものを含め、$ で囲まれた語句は特殊な働きをし、$end$ (予約語)はスニペット展開後のカーソル位置を示す。
また、Shortcut が設定されているため、"reactive" と入力し、Tabキーを2回押すことでスニペットを呼び出すことができる。

主要なXMLの要素を以下に記す。すべての項目はリンク先を参照。
要素(タグ) 必須 説明 備考
CodeSnippets 1つ以上の CodeSnippet 要素のグループ
CodeSnippet コードスニペットのルート要素
  • Format 属性が必須(※1)
  • CodeSnippets 省略時はルートに記述可能
Header コードスニペットに関する情報
Title コードスニペットの表示名
Author コードスニペットの作者
Description コードスニペットの概要
Keywords 1つ以上の Keyword 要素のグループ
Keyword Visual Studioが検索・分類に用いる
カスタムキーワード
Keywords 省略時はHeader 直下に記述可能
Shortcut コードスニペットを呼び出す際に入力する
ショートカットテキスト
英数字とアンダースコアを使用可能
(但しC++はアンダースコアを使用できない)
SnippetTypes 1つ以上の SnippetType 要素のグループ
SnippetType コードスニペットの挿入方法(値は以下のいずれか)
  • Expansion : カーソル位置に挿入
  • SurroundsWith : 選択したコードの周りに配置
SnippetTypes 省略時はHeader 直下に記述可能
Snippet コードスニペットの本体
Code コードスニペットとして実際に展開されるコード
  • Language 属性が必須(※2)
  • CDATA[] の大括弧の内容が展開される(作例参照)
  • $ で囲まれた語句は特殊な働きをする(※3)
Declarations コードスニペット中の編集可能要素
(リテラルとオブジェクト)
Literal リテラル
Default 既定で使用されるリテラル値
Id リテラルの一意な識別子
Function リテラルがVisual Studioでフォーカスを受け取った際に
実行される関数
ToolTip リテラルが取り得る値と使用法に関する説明
※1 : Format="x.x.x" 形式でスキーマバージョンを指定する。指定が正しくない場合、コードスニペットは無視される。
※2 : Language 属性で指定した言語に対応したファイルでのみ展開可能となる。指定できる値は以下のとおり。
対応する言語
CPP C++
CSharp C#
HTML HTML
JavaScript JavaScript
SQL SQL
TypeScript TypeScript
VB Visual Basic
XAML XAML
XML XML
※3 : 以下は予約語で、ひとつのスニペット内に複数回記述できない。それ以外はリテラルまたはオブジェクトとして扱われる。
$end$ スニペット展開後のカーソル位置を表す
$selected$ 選択された範囲を表す(プレースホルダ)

2. スニペットのインポート

  1. Visual Studioを開き、「ツール」>「コード スニペット マネージャー」を選択する。
  2. コード スニペット マネージャーが開くので、作成したスニペットを使用する「言語」と、格納する「場所」を選択する。
    (例 : C#で使用する場合は、「言語」に「CSharp」を選択する。)
  3. 作成したスニペットファイルを選択し、「開く」を押す。
  4. 「場所」にチェックを入れ、「完了」を押す。
  5. 「OK」を押すと、スニペットが使用可能となる。

組み込み済のスニペット

Visual Studioには多数のスニペットが組み込まれており、特殊な手順を経ずに利用できる。ここではその一部を記す。

C#

リファレンスはリンク先を参照。
スニペット 概要 展開される内容
prop 単純なプロパティ
(自動プロパティ)
public int MyProperty { get; set; }
propa 依存関係プロパティ
(RegisterAttached())
public static int GetMyProperty(DependencyObject obj) { return (int)obj.GetValue(MyPropertyProperty); } public static void SetMyProperty(DependencyObject obj, int value) { obj.SetValue(MyPropertyProperty, value); } // (略) public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.RegisterAttached("MyProperty", typeof(int), typeof(ownerclass), new PropertyMetadata(0));
propdp 依存関係プロパティ
(Register())
public int MyProperty { get { return (int)GetValue(MyPropertyProperty); } set { SetValue(MyPropertyProperty, value); } } // (略) public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass), new PropertyMetadata(0));
propfull 完全なプロパティ
(フィールドとgetter、setterの組)
private int myVar; public int MyProperty { get { return myVar; } set { myVar = value; } }
propg 自動プロパティ
(アクセスレベル分離)
public int MyProperty { get; private set; }

C++

リファレンスを参照。